package net.servir.capacidades.service.impl;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import net.servir.capacidades.dao.CapacidadesDAO;
import net.servir.capacidades.model.Ambito;
import net.servir.capacidades.model.Departamento;
import net.servir.capacidades.model.Diagnostico;
import net.servir.capacidades.model.Distrito;
import net.servir.capacidades.model.Ejecutora;
import net.servir.capacidades.model.EjecutoraRegimen;
import net.servir.capacidades.model.Etapa;
import net.servir.capacidades.model.GenOption;
import net.servir.capacidades.model.LogAuditoria;
import net.servir.capacidades.model.NivelGobierno;
import net.servir.capacidades.model.ParticipanteBusqueda;
import net.servir.capacidades.model.Persona;
import net.servir.capacidades.model.Profesion;
import net.servir.capacidades.model.Provincia;
import net.servir.capacidades.model.PuestoTipo;
import net.servir.capacidades.model.Regimen;
import net.servir.capacidades.model.Responsable;
import net.servir.capacidades.model.ResponsableBusqueda;
import net.servir.capacidades.model.ResponsableEjecutoraAmbito;
import net.servir.capacidades.model.ResponsableIdentificacion;
import net.servir.capacidades.model.Sector;
import net.servir.capacidades.model.SegPerfil;
import net.servir.capacidades.model.ServicioCivil;
import net.servir.capacidades.model.ServicioCivilBusqueda;
import net.servir.capacidades.model.Sistema;
import net.servir.capacidades.model.SistemaEtapa;
import net.servir.capacidades.model.Test;
import net.servir.capacidades.model.TipoDocumento;
import net.servir.capacidades.model.TipoObservacion;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.jsp.JspResponsableEdicion;
import net.servir.capacidades.model.jsp.JspUsuarioEdicion;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.model.Estudios;
import net.servir.capacidades.model.MayorGradoAcademico;
import net.servir.capacidades.model.Snip;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CapacidadesServiceImpl implements CapacidadesService {

	@Autowired
	private CapacidadesDAO capacidadesDAO;

	public LinkedList<Sistema> ObtenerSistema() {
		return capacidadesDAO.ObtenerSistema();
	}

	public LinkedList<Ejecutora> ObtenerEjecutora(Number id_ejecutora) {
		return capacidadesDAO.ObtenerEjecutora(id_ejecutora);
	}

	public Integer ObtenerPerfil(String dni, String clave) {
		return capacidadesDAO.ObtenerPerfil(dni, clave);
	};

	public String ObtenerFechaHoraSistema() {
		return capacidadesDAO.ObtenerFechaHoraSistema();
	}

	public String ObtenerFechaSistema() {
		return capacidadesDAO.ObtenerFechaSistema();
	}

	public List<Etapa> ObtenerEtapasAmbito(Number idAmbito) {
		return capacidadesDAO.ObtenerEtapasAmbito(idAmbito);
	}

	public List<Etapa> ObtenerEtapasAmbitoPersonalizado(Number idAmbito,
			Number idEjecutora, String isFuncionesPersonalizadas, Number id_sistema_etapa) {
		return capacidadesDAO.ObtenerEtapasAmbitoPersonalizado(idAmbito,
				idEjecutora, isFuncionesPersonalizadas, id_sistema_etapa);
	}

	public List<ResponsableEjecutoraAmbito> ObtenerAmbitosResponsable(
			Number idResponsable) {
		return capacidadesDAO.ObtenerAmbitosResponsable(idResponsable);
	}

	public Usuario GetUsuarioIdentificacion(String dni) {
		return capacidadesDAO.GetUsuarioIdentificacion(dni);
	}

	public LinkedList<Ejecutora> ObtenerEjecutorasNivelGobierno(
			Integer idNivelGobierno, String ubigeo, Integer idSector) {
		return capacidadesDAO.ObtenerEjecutorasNivelGobierno(idNivelGobierno,
				ubigeo, idSector);
	}

	public LinkedList<Provincia> ObtenerProvincias(String coddep) {
		return capacidadesDAO.ObtenerProvincias(coddep);
	}

	public LinkedList<Distrito> ObtenerDistritos(String coddep, String codpro) {
		return capacidadesDAO.ObtenerDistritos(coddep, codpro);
	}

	public LinkedList<NivelGobierno> ObtenerNivelGobiernos() {
		return capacidadesDAO.ObtenerNivelGobiernos();
	}

	public LinkedList<Departamento> ObtenerDepartamentos() {
		return capacidadesDAO.ObtenerDepartamentos();
	}

	public LinkedList<Sector> ObtenerSectors() {
		return capacidadesDAO.ObtenerSectors();
	}

	public String ObtenerClave(String dni, Integer idSistema) {
		return capacidadesDAO.ObtenerClave(dni, idSistema);
	}

	public LinkedList<Regimen> ObtenerRegimen() {
		return capacidadesDAO.ObtenerRegimen();
	}

	public LinkedList<SegPerfil> obtenerPerfiles() {
		return capacidadesDAO.obtenerPerfiles();
	}

	public LinkedList<Test> ObtenerTestDiagnostico(Integer idAmbito) {
		return capacidadesDAO.ObtenerTestDiagnostico(idAmbito);
	}

	public LinkedList<Test> ObtenerListaTest(Integer idAmbito,
			Integer idTipoPrueba) {
		return capacidadesDAO.ObtenerListaTest(idAmbito, idTipoPrueba);
	}

	public LinkedList<Test> ObtenerTestDiagnosticoNoEjecutados(Integer idAmbito) {
		return capacidadesDAO.ObtenerTestDiagnosticoNoEjecutados(idAmbito);
	}

	public ServicioCivil ObtenerServicioCivil(Number idServicioCivil) {
		return capacidadesDAO.ObtenerServicioCivil(idServicioCivil);
	}

	public LinkedList<TipoObservacion> ObtenerTipoObservacion() {
		return capacidadesDAO.ObtenerTipoObservacion();
	}

	public LinkedList<Profesion> ObtenerProfesion() {
		return capacidadesDAO.ObtenerProfesion();
	}

	public LinkedList<TipoDocumento> ObtenerTipoDocumento() {
		return capacidadesDAO.ObtenerTipoDocumento();
	}

	public List ObtenerFunciones(Number idServicioCivil) {
		return capacidadesDAO.ObtenerFunciones(idServicioCivil);
	}

	public List<Number> ObtenerIdFuncionesSC(Number idServicioCivil) {
		return capacidadesDAO.ObtenerIdFuncionesSC(idServicioCivil);
	}

	public String EditarCorreo(ServicioCivil obj) {
		return capacidadesDAO.EditarCorreo(obj);
	}

	public String recuperarClave(String dni, Integer idSistema) {
		return capacidadesDAO.ObtenerClave(dni, idSistema);
	}

	public String recuperarNuevaClave(ServicioCivil obj) {
		return capacidadesDAO.ObtenerNuevaClave(obj);
	}

	public LinkedList<LogAuditoria> ObtenerLogAuditoria(String dni) {
		return capacidadesDAO.ObtenerLogAuditoria(dni);
	}

	public List ObtenerDatosPrueba(Integer idTest, Integer idSistema,
			Integer idAmbito) {
		return capacidadesDAO.ObtenerDatosPrueba(idTest, idSistema, idAmbito);
	}

	/*
	 * ================================================================
	 * IMPLEMENTS RESPONSABLE EDICION===========
	 * =====================================================
	 */

	public Responsable GetResponsablePorDNI(String dni, Number idAmbito) {
		return capacidadesDAO.GetResponsablePorDNI(dni, idAmbito);
	}

	public Responsable GetResponsable(Number idResponsable) {
		return capacidadesDAO.GetResponsable(idResponsable);
	}

	public ServicioCivil ObtenerServicioCivilPorDNI(String dni,
			Number idPersona, Number id_ambito) {
		return capacidadesDAO.ObtenerServicioCivilPorDNI(dni, idPersona,
				id_ambito);
	}

	public LinkedList<Test> ObtenerTestDiagnoticoPorDNI(String dni,
			Number id_persona) {
		return capacidadesDAO.ObtenerTestDiagnoticoPorDNI(dni, id_persona);
	}

	public List<Diagnostico> ObtenerDiagnosticos() {
		return capacidadesDAO.ObtenerDiagnosticos();
	}

	public Diagnostico GetDiagnostico(Number idDiagnostico) {
		return capacidadesDAO.GetDiagnostico(idDiagnostico);
	}

	public Persona GetPersona(Responsable responsable) {
		return capacidadesDAO.GetPersona(responsable);
	}

	public Persona GetPersona(String dni, Number idAmbito) {
		return capacidadesDAO.GetPersona(dni, idAmbito);
	}

	public Persona GetPersonaPorEmail(String email, Number idAmbito) {
		return capacidadesDAO.GetPersonaPorEmail(email, idAmbito);
	}

	public void EliminarParticipante(JspResponsableEdicion obj) {
		capacidadesDAO.EliminarParticipante(obj);
	}

	public Responsable GetResponsablePorEjecutora(Number idEjecutora) {
		return capacidadesDAO.GetResponsablePorEjecutora(idEjecutora);
	}

	public Integer grabarNuevoResponsable(JspResponsableEdicion obj,
			Vector<Object> funciones) {
		return capacidadesDAO.grabarNuevoResponsable(obj, funciones);
	}

	public Integer grabarResponsablePersona(JspResponsableEdicion obj) {
		return capacidadesDAO.grabarResponsablePersona(obj);
	}

	public void grabarResponsable(JspResponsableEdicion obj,
			Vector<Object> funcionesPersonalizadas) {
		capacidadesDAO.grabarResponsable(obj, funcionesPersonalizadas);
	}

	public void grabarValidacion(Persona persona, Number idejecutora) {
		capacidadesDAO.grabarValidacion(persona, idejecutora);
	}

	public void grabarInvalidacion(Persona persona, Number idejecutora) {
		capacidadesDAO.grabarInvalidacion(persona, idejecutora);
	}

	public void grabarInhabilitacion(JspResponsableEdicion obj) {
		capacidadesDAO.grabarInhabilitacion(obj);
	}

	/*
	 * ===============================================================
	 * IMPLEMENTS RESPONSABLE BUSQUEDA ==========
	 * =====================================================
	 */
	public LinkedList<GenOption> ObtenerEstadosResponsable() {
		return capacidadesDAO.ObtenerEstadosResponsable();
	}

	public LinkedList<GenOption> ObtenerEstadosOperadores() {
		return capacidadesDAO.ObtenerEstadosOperadores();
	}

	public LinkedList<GenOption> ObtenerPerfiles() {
		return capacidadesDAO.ObtenerPerfiles();
	}

	public LinkedList<GenOption> ObtenerEstadosInscritos() {
		return capacidadesDAO.ObtenerEstadosInscritos();
	}

	public LinkedList<GenOption> ObtenerEstadosPlazo() {
		return capacidadesDAO.ObtenerEstadosPlazo();
	}

	/*
	 * ============================================================= IMPLEMENTS
	 * SERVICIO CIVIL BUSQUEDA =========
	 * =====================================================
	 */

	public List ObtenerServicioCivilBusquedaFromSql(String sql) {
		return capacidadesDAO.ObtenerServicioCivilBusquedaFromSql(sql);
	}

	public Number cargarResultadosBusqueda(String vSql, String dni, Integer tipo) {
		return capacidadesDAO.cargarResultadosBusqueda(vSql, dni, tipo);
	}

	/*
	 * ============================================================= IMPLEMENTS
	 * SERVICIO CIVIL EDICION ==========
	 * =====================================================
	 */
	// VIENE DE CESNSO SERVICE INI
	public ResponsableIdentificacion GetResponsableIdentificacion(String dni) {
		return capacidadesDAO.GetResponsableIdentificacion(dni);
	}

	// FIN
	public LinkedList<ResponsableIdentificacion> ObtenerResponsableIdentificacion(
			String dni) {
		return capacidadesDAO.ObtenerResponsableIdentificacion(dni);
	}

	public String VerificarExisteDNI(String dni, Number idEjecutora) {
		return capacidadesDAO.VerificarExisteDNI(dni, idEjecutora);
	}

	public String verificarExisteDNI(String dni) {
		return capacidadesDAO.verificarExisteDNI(dni);
	}

	public void EliminarServicioCivil(ServicioCivil obj) {
		capacidadesDAO.EliminarServicioCivil(obj);

	}

	public String AgregarServicioCivil(ServicioCivil obj) {
		return capacidadesDAO.AgregarServicioCivil(obj);
	}

	public String agregarUsuario(JspUsuarioEdicion obj) {
		return capacidadesDAO.agregarUsuario(obj);
	}

	public String AgregarFuncionesSC(Number idServicioCivil,
			String listaFunciones, Number idAmbito) {
		return capacidadesDAO.AgregarFuncionesSC(idServicioCivil,
				listaFunciones, idAmbito);
	}

	public String EditarServicioCivil(ServicioCivil obj) {
		return capacidadesDAO.EditarServicioCivil(obj);
	}

	public void grabarObservacion(ServicioCivil obj) {
		capacidadesDAO.grabarObservacion(obj);
	}

	public void grabarSubsanacion(ServicioCivil obj) {
		capacidadesDAO.grabarSubsanacion(obj);

	}

	public void grabarValidacion(ServicioCivil obj) {
		capacidadesDAO.grabarValidacion(obj);
	}

	public void grabarInvalidacion(ServicioCivil obj) {
		capacidadesDAO.grabarInvalidacion(obj);
	}

	public Sistema GetSistema(Number idSistema) {
		return capacidadesDAO.GetSistema(idSistema);
	}

	public Ejecutora GetEjecutora(Number idEjecutora) {
		return capacidadesDAO.GetEjecutora(idEjecutora);
	}

	public List ObtenerDestinatariosCorreo(String dni) {
		return capacidadesDAO.ObtenerDestinatariosCorreo(dni);
	}

	public String ObtenerQueryDestinatariosCorreo(String dni) {
		return capacidadesDAO.ObtenerQueryDestinatariosCorreo(dni);
	}

	public String ObtenerDescEtapaFuncion(Number idFuncion) {
		return capacidadesDAO.ObtenerDescEtapaFuncion(idFuncion);
	}

	public List ObtenerActividades(Number idFuncion) {
		return capacidadesDAO.ObtenerActividades(idFuncion);
	}

	public LinkedList<Ambito> ObtenerAmbito(Number id_sistema) {
		return capacidadesDAO.ObtenerAmbito(id_sistema);
	}

	public LinkedList<EjecutoraRegimen> ObtenerRegimenes() {
		return capacidadesDAO.ObtenerRegimenes();
	}

	public Integer tieneResponsableLaEjecutora(Integer id_ejecutora) {
		return capacidadesDAO.tieneResponsableLaEjecutora(id_ejecutora);
	}

	// public void actualizarResponsableDeEjecutora(JspResponsableEdicion obj)
	public void actualizarResponsableDeEjecutora(JspResponsableEdicion obj,
			Responsable responsableActual) {
		capacidadesDAO.actualizarResponsableDeEjecutora(obj, responsableActual);
	}

	public Persona GetOtraPersonaPorEmail(Integer id_persona, String email,
			Number idAmbito) {
		return capacidadesDAO.GetOtraPersonaPorEmail(id_persona, email,
				idAmbito);
	}

	public Persona GetOtraPersonaPorDni(Integer id_persona, String dni,
			Number idAmbito) {
		return capacidadesDAO.GetOtraPersonaPorDni(id_persona, dni, idAmbito);
	}

	public List<String> getParametroCorreo() {
		return capacidadesDAO.getParametroCorreo();
	}

	@Override
	public String VerificarExisteOtroDNI(String dni, Number idAmbito,
			Number idServicioCivil) {
		return capacidadesDAO.VerificarExisteOtroDNI(dni, idAmbito,
				idServicioCivil);
	}

	@Override
	public String VerificarExisteOtroCorreo(String correo, Number idAmbito,
			Number idServicioCivil) {
		return capacidadesDAO.VerificarExisteOtroCorreo(correo, idAmbito,
				idServicioCivil);
	}

	public List<Etapa> ObtenerEtapasNivelGobierno(Number idNivelGobierno,
			Number idResponsable) {
		return capacidadesDAO.ObtenerEtapasNivelGobierno(idNivelGobierno,
				idResponsable);
	}
	
	public List<Etapa> ObtenerEtapasNivelGobiernoSA(Number idNivelGobierno,
			Number idResponsable,String isFuncionesPersonalizadas,
			Number id_sistema_etapa) {
		return capacidadesDAO.ObtenerEtapasNivelGobiernoSA(idNivelGobierno,
				idResponsable,isFuncionesPersonalizadas,
				id_sistema_etapa);
	}

	// -- jm --
	public boolean TieneOperadoresAsignados(Number id_responsable) {
		return capacidadesDAO.TieneOperadoresAsignados(id_responsable);

	}

	// fin

	public LinkedList<Estudios> ObtenerEstudios() {
		return capacidadesDAO.ObtenerEstudios();
	}

	public LinkedList<MayorGradoAcademico> ObtenerMayorGradoAcademico() {
		return capacidadesDAO.ObtenerMayorGradoAcademico();
	}

	public LinkedList<Snip> ObtenerSnip() {
		return capacidadesDAO.ObtenerSnip();
	}

	public String ObtenerTituloUniversitario(Number idServicioCivil) {
		return capacidadesDAO.ObtenerTituloUniversitario(idServicioCivil);
	}

	public List ObtenerFuncionesSeleccionadasResponsable(Number id_ejecutora,
			Number id_ambito, Number id_responsable) {
		return capacidadesDAO.ObtenerFuncionesSeleccionadasResponsable(
				id_ejecutora, id_ambito, id_responsable);
	}

	public int ObtenerNroFuncionesP(Number idNivelGobierno, Number idEjecutora) {
		return capacidadesDAO
				.ObtenerNroFuncionesP(idNivelGobierno, idEjecutora);
	}

	public Integer AplicaFuncionesPersonalizadas(Number idResponsable) {
		return capacidadesDAO.AplicaFuncionesPersonalizadas(idResponsable);
	}

	public Integer ObtenerIdNivelGobierno(Number idEjecutora) {
		return capacidadesDAO.ObtenerIdNivelGobierno(idEjecutora);
	}

	public List<Etapa> getEtapasNivelGobierno(Number idEjecutora,
			Integer aplicaFuncionPersonalizada) {
		return capacidadesDAO.getEtapasNivelGobierno(idEjecutora,
				aplicaFuncionPersonalizada);
	}

	public String obtenerListaFunciones(Number id_ejecutora) {
		return capacidadesDAO.obtenerListaFunciones(id_ejecutora);
	}

	public List<Etapa> ObtenerFuncionesOrdenadas(Number idAmbito) {
		return capacidadesDAO.ObtenerFuncionesOrdenadas(idAmbito);
	}

	public void eliminarDestinariosCorreoEnviados(Number id_servicio_civil,
			String dniUsuario) {
		capacidadesDAO.eliminarDestinariosCorreoEnviados(id_servicio_civil,
				dniUsuario);
	}

	public LinkedList<SistemaEtapa> ObtenerSistemaEtapa() {
		return capacidadesDAO.ObtenerSistemaEtapa();
	}

	@Override
	public void mailFinalizaCenso(Number idResponsable, Number idSistema,
			Number idAmbito) {
		capacidadesDAO.mailFinalizaCenso(idResponsable, idSistema, idAmbito);
	}

	@Override
	public LinkedList<SistemaEtapa> ObtenerSistemaEtapa(Number idAmbito) {
		return capacidadesDAO.ObtenerSistemaEtapa(idAmbito);
	}

	@Override
	public Number validacionMasiva(String vSql) {
		return capacidadesDAO.validacionMasiva(vSql);
	}

	@Override
	public PuestoTipo getPuestoTipo(Number idPuestoTipo) {
		return capacidadesDAO.getPuestoTipo(idPuestoTipo);
	}
}
